package cn.trigram.example.designpattern.visitor;

/**
 * 访问者模式其实实现了在Java这种静态语言中完成动态双重分派调用。<br>
 * 一般来说，我们调用一个对象的方法有两种过程<br>
 * 1、如果是重写，那Java是在运行时确定实际类型后调用（动态分派）<br>
 * 2、如果是重载，Java在编译时期确定参数签名（静态分派）<br>
 * 而对于很多动态语言来说，在调用方法时，实现的是动态双重分派，即通过参数签名和实际类型同时确定<br>
 * 访问者模式便可以实现Java的动态双重分派，即可以将确定参数签名由编译期确定推迟到运行时期。<br> 
 * 其实就是把重载推迟到了访问者中，而在真正使用对象的方法时就只需要传入访问者即可
 */
public interface Visitor {

  void visit(UserVIP user);

  void visit(UserOrdinary user);

}